package jsu.hx.lost.Service;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@Component
public class AliyunOssService {
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.access-key-id}")
    private String accessKeyId;

    @Value("${aliyun.oss.access-key-secret}")
    private String accessKeySecret;

    @Value("${aliyun.oss.bucket-name}")
    private String bucketName;

    @Value("${aliyun.oss.base-url}")
    private String baseUrl;

    // 创建 OSS 客户端（线程安全，建议单例）
    private OSS ossClient;

    @PostConstruct
    public void init() {
        ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    @PreDestroy
    public void shutdown() {
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }

    /**
     * 上传文件到 OSS
     * @param file 文件对象
     * @param folder 存储目录（如 "avatars"、"messages"）
     * @return 文件访问 URL
     */
    public String uploadFile(MultipartFile file, String folder) throws IOException {
        // 生成唯一文件名（避免覆盖）
        String fileName = folder + "/" + UUID.randomUUID() + "-" + file.getOriginalFilename();

        // 上传文件流
        ossClient.putObject(bucketName, fileName, file.getInputStream());

        // 返回完整访问路径
        return baseUrl + fileName;
    }

    /**
     * 删除 OSS 文件
     * @param fileUrl 文件完整 URL
     */
    public void deleteFile(String fileUrl) {
        // 从 URL 中提取 objectName（去除 baseUrl）
        String objectName = fileUrl.replace(baseUrl, "");
        ossClient.deleteObject(bucketName, objectName);
    }
    public String getBaseUrl() {
        return baseUrl;
    }
}
